package com.zz.admin.common.eventListener.i18n;

import com.zz.admin.internationalManagement.service.I18nConfigService;
import com.zz.common.codeGenerator.event.I18nConfigDto;
import com.zz.common.codeGenerator.event.I18nConfigEvent;
import com.zz.common.constants.BaseConstant;
import com.zz.common.utils.mapper.BeanMapper;
import jakarta.annotation.Resource;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;

@Component
public class I18nEventListener {

    @Resource
    private I18nConfigService i18nService;

    @EventListener
    public void handleSaveI18nConfig(I18nConfigEvent event) {
        if (!event.getI18nConfigList().isEmpty()) {
            List<I18nConfigDto> i18nConfigList = event.getI18nConfigList();
            List<com.zz.admin.internationalManagement.dto.I18nConfigDto> i18nConfigDtos = BeanMapper
                    .mapList(i18nConfigList, I18nConfigDto.class, com.zz.admin.internationalManagement.dto.I18nConfigDto.class);
            // 如果有删除标识的，则先删除
            List<com.zz.admin.internationalManagement.dto.I18nConfigDto> deleteList = i18nConfigDtos.stream().filter(i18nConfigDto -> BaseConstant.YES.equals(i18nConfigDto.getDelFlag()))
                    .collect(Collectors.toList());
            if (!deleteList.isEmpty()) {
                i18nService.trueDeleteBatchWithLogic(deleteList);
                i18nConfigDtos.removeAll(deleteList);
            }

            int size = i18nService.saveOrModifyBatch(i18nConfigDtos).size();
            if (size != i18nConfigDtos.size()) {
                throw new RuntimeException("保存或更新国际化配置失败");
            }
        }
    }
}
